package com.molichuxing.services.business.service;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.exception.BizException;
import com.molichuxing.services.business.dto.request.CreateDealerSuperAccountDto;
import com.molichuxing.services.business.dto.request.SmartTerminalLoginDto;
import com.molichuxing.services.business.dto.request.UpdateDealerSuperAccountDto;
import com.molichuxing.services.business.dto.response.AccountLoginBizDto;
import com.molichuxing.services.infrastructure.dto.response.response.AccountDto;
import com.molichuxing.services.infrastructure.dto.response.response.AccountModifyDto;

import java.util.List;
import java.util.Map;

/**
 * 账号组合服务
 *
 * @author zoumingyu
 * @date 2019年9月9日
 */
public interface AccountBizService {

    /**
     * 账号登录
     *
     * @param params account：账号 <br/>
     *               password：密码 <br/>
     *               systemType：系统类型-enum <br/>
     * @return
     */
    AccountLoginBizDto login(Map<String, Object> params) throws BizException;

    /**
     * 账号登录
     *
     * @param params account：账号 <br/>
     *               password：密码 <br/>
     *               systemType：系统类型-enum <br/>
     * @return
     */
    AccountLoginBizDto loginByIov(Map<String, Object> params) throws BizException;

    /**
     * 根据条件查询出符合条件的后台用户并返回
     *
     * @param params
     * @param pageNum
     * @param pageSize
     * @return
     */
    Paged<AccountDto> getAccountList(Map<String, Object> params, int pageNum, int pageSize);

    /**
     * 根据条件查询出符合条件的后台用户并返回
     *
     * @param params
     * @param pageNum
     * @param pageSize
     * @return
     */
    Paged<AccountDto> getAccountListByDealer(Map<String, Object> params, int pageNum, int pageSize);

    /**
     * 修改用户
     *
     * @param dto
     * @return
     */
    int modifyAccount(AccountModifyDto dto);

    /**
     * 获取经销商下的拥有智能终端的用户
     *
     * @return
     */
    List<AccountDto> getSmartTerminalAccountByDealer(int dealerId);

    /**
     * 根据手机号判断经销商系统下是否存在对应的拥有智能终端登陆权限的用户
     *
     * @param id        用户id
     * @param userPhone 用户手机号
     * @return
     */
    AccountDto getSmartTerminalAccount(Integer id, String userPhone);

    /**
     * 智能终端登陆
     *
     * @return
     */
    boolean smartTerminalLogin(SmartTerminalLoginDto dto);

    /**
     * 创建经销商下得超级管理员，以及超级管理员角色
     *
     * @param dto
     * @return
     */
    String createDealerSuperAccount(CreateDealerSuperAccountDto dto);

    /**
     * 禁用经销商下的所有用户
     *
     * @param dealerId
     * @return
     */
    boolean modifyAccountToDisableByDealerId(int dealerId);

    /**
     * 启用经销商下的所有用户
     *
     * @param dealerId
     * @return
     */
    int modifyAccountToOpenByDealerId(int dealerId);

    String updateDealerSuperAccount(UpdateDealerSuperAccountDto dto);

    AccountDto getAccountByDealer(String accountName);
}
